/**
 * PanelAsistencia.java
 */

 /**
 *  AdSec: Administrador de Secundarias
 *  Copyright (C) 2009 Daniela Ramírez Chaves (dannyrch@gmail.com)
 *  Copyright (C) 2009 Leonel Salazar Valverde (leo87sv@gmail.com)
 *
 *  This file is part of AdSec.
 *  AdSec is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  AdSec is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with AdSec.  If not, see <http://www.gnu.org/licenses/>.
 */

package adsec.presentacion;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.LinkedList;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import adsec.entidades.Anio;
import adsec.entidades.AsistenciaEstudiante;
import adsec.entidades.Estado;
import adsec.entidades.Estudiante;
import adsec.entidades.LlaveValor;
import adsec.entidades.MateriaCursada;
import adsec.entidades.Nivel;
import adsec.entidades.Permiso;
import adsec.entidades.Seccion;
import adsec.negocios.AdministradorSeguridad;
import adsec.negocios.ControladoraAsistenciaEstudiante;
import adsec.negocios.UtilidadesCapaNegocios;
import org.jdesktop.application.Action;


public class PanelAsistencia extends javax.swing.JPanel implements ActionListener, ListSelectionListener{

    private ControladoraAsistenciaEstudiante contAsistencia;
    private AdministradorSeguridad admSeguridad;
    private Permiso permisoAsistencia;
    private Estado estado;
    private LinkedList<MateriaCursada> materiasMatriculadas;
    private LinkedList<AsistenciaEstudiante> listaAsistencias;

    /** Creates new form PanelNivelSeccion */
    public PanelAsistencia() {
        initComponents();
        this.iniciarPanelAsistencia();
    }
    
    private void iniciarPanelAsistencia(){
        this.contAsistencia = new ControladoraAsistenciaEstudiante();
        this.admSeguridad = AdministradorSeguridad.getInstancia();
        this.permisoAsistencia = this.admSeguridad.getPermiso(UtilidadesCapaNegocios.moduloMateriasMatriculadas);
        this.estado = new Estado();
        this.materiasMatriculadas = new LinkedList<MateriaCursada>();
        this.listaAsistencias = new LinkedList<AsistenciaEstudiante>();
        this.estado.setEstadoActual(Estado.CONSULTAR);
        this.habilitarCampos(false);
        this.cbCedula.setEnabled(false);
        this.cbNombreApellidos.setEnabled(false);
        this.habilitarBotonesIME(this.permisoAsistencia.isInsertar(),false, false);
        this.habilitarAceptarCancelar(false);
        if(this.permisoAsistencia.isConsultar()){
            this.cargarAños();
            this.cargarNiveles();
        }
        this.limpiarCampos();   
    }

    private void limpiarCampos(){
        this.cbAño.setSelectedIndex(-1);
        this.cbNivel.setSelectedIndex(-1);
        this.cbSeccion.setSelectedIndex(-1);
        this.cbCedula.setSelectedIndex(-1);
        this.cbNombreApellidos.setSelectedIndex(-1);
        this.cbMaterias.setSelectedIndex(-1);
        this.cbPeriodo.setSelectedIndex(-1);
        this.spinAusenciasInjustificadas.setValue(0);
        this.spinAusenciasJustificadas.setValue(0);
        this.spinEscapadas.setValue(0);
        this.spinTardias.setValue(0);
    }


    private void habilitarCampos(boolean habilitar){
        this.spinAusenciasInjustificadas.setEnabled(habilitar);
        this.spinAusenciasJustificadas.setEnabled(habilitar);
        this.spinEscapadas.setEnabled(habilitar);
        this.spinTardias.setEnabled(habilitar);
    }

    private void habilitarBotonesIME(boolean insertar, boolean modificar, boolean eliminar){
        this.btnInsertar.setEnabled(insertar);
        this.btnModificar.setEnabled(modificar);
        this.btnEliminar.setEnabled(eliminar);
    }

    private void habilitarAceptarCancelar(boolean habilitar){
        this.btnAceptar.setEnabled(habilitar);
        this.btnCancelar.setEnabled(habilitar);
    }

    public void valueChanged(ListSelectionEvent e) {
        int filas = ((DefaultTableModel)this.gridAsistencia.getModel()).getRowCount();
        if(filas > 0 && estado.getEstadoActual() == Estado.CONSULTAR && e.getValueIsAdjusting()){
            int fila = this.gridAsistencia.getSelectedRow();
            if(fila >= 0 && fila < listaAsistencias.size()){
                AsistenciaEstudiante asistencia = listaAsistencias.get(fila);
                this.consultarAsistencia(asistencia);
            }
        }
    }

    private void consultarAsistencia(AsistenciaEstudiante asistencia){
        if(asistencia != null){
            this.cbAño.setSelectedItem(Integer.toString(asistencia.getAnio()));
            this.cbNivel.setSelectedItem(Integer.toString(asistencia.getNivel()));
            this.cbSeccion.setSelectedItem(Integer.toString(asistencia.getSeccion()));
            this.cbMaterias.setSelectedItem(asistencia.getNombreMateria());
            this.cbPeriodo.setSelectedItem(Integer.toString(asistencia.getPeriodo()));
            this.cbCedula.setSelectedItem(asistencia.getCedula());
            this.spinEscapadas.setValue(asistencia.getEscapadas());
            this.spinTardias.setValue(asistencia.getTardias());
            this.spinAusenciasJustificadas.setValue(asistencia.getAusenciasJustificadas());
            this.spinAusenciasInjustificadas.setValue(asistencia.getAusenciasInjustificadas());
            this.btnModificar.setEnabled(permisoAsistencia.isConsultar());
            this.btnEliminar.setEnabled(permisoAsistencia.isEliminar());
        }
    }

    public void actionPerformed(ActionEvent evento){
        JComboBox fuente = (JComboBox)evento.getSource();
        boolean encontrado = false;
        if(fuente.equals(this.cbCedula)){
            this.cbNombreApellidos.setSelectedIndex(this.cbCedula.getSelectedIndex());
            encontrado = true;
        }
        if(fuente.equals(this.cbNombreApellidos)){
            this.cbCedula.setSelectedIndex(this.cbNombreApellidos.getSelectedIndex());
            encontrado = true;
        }

        if(!encontrado && (fuente.equals(this.cbNivel) || fuente.equals(this.cbAño) || fuente.equals(this.cbSeccion))){
            if(!fuente.equals(this.cbSeccion)){
                this.cargarSecciones();
            }
            this.cargarMaterias();
            this.cargarComboBoxDatosEstudiante();
            if(this.gridAsistencia.getSelectedRow() < 0){
                this.cargarGridAsistencia();
            }
            encontrado = true;
        }

        if(!encontrado && (fuente.equals(this.cbMaterias) || fuente.equals(this.cbPeriodo))){
            if(!fuente.equals(this.cbPeriodo)){
                this.seleccionaronMateria();
            }
            if(estado.getEstadoActual() != Estado.MODIFICAR){
                this.cargarComboBoxDatosEstudiante();
                if(this.gridAsistencia.getSelectedRow() < 0){
                    this.cargarGridAsistencia();
                }
            }
            encontrado = true;
        }
    }//fin de actionPerformed

    private void seleccionaronMateria(){
        ((DefaultComboBoxModel)cbPeriodo.getModel()).removeAllElements();
        if(this.cbMaterias.getSelectedIndex() > 0){
            int cantidadPeriodos = materiasMatriculadas.get(this.cbMaterias.getSelectedIndex() - 1).getCantidadPeriodos();
            for(int i = 1; i <= cantidadPeriodos; i++){
                ((DefaultComboBoxModel)this.cbPeriodo.getModel()).addElement(Integer.toString(i));
            }
        }
    }

    private void cargarAños(){
        ((DefaultComboBoxModel)cbAño.getModel()).removeAllElements();
        LinkedList<Anio> años = this.contAsistencia.consultarAnios();
        Iterator<Anio> iterador = años.iterator();
        ((DefaultComboBoxModel)this.cbAño.getModel()).addElement("");
        while(iterador.hasNext()){
            String elemento = Integer.toString(iterador.next().getAnio());
            ((DefaultComboBoxModel)this.cbAño.getModel()).addElement(elemento);
        }
    }

    private void cargarNiveles(){
        ((DefaultComboBoxModel)cbNivel.getModel()).removeAllElements();
        LinkedList<Nivel> niveles = this.contAsistencia.consultarNivelesTodos();
        Iterator<Nivel> iterador = niveles.iterator();
        ((DefaultComboBoxModel)this.cbNivel.getModel()).addElement("");
        while(iterador.hasNext()){
            String elemento = Integer.toString(iterador.next().getNivel());
            ((DefaultComboBoxModel)this.cbNivel.getModel()).addElement(elemento);
        }
    }

    private void cargarSecciones(){
        ((DefaultComboBoxModel)cbSeccion.getModel()).removeAllElements();
        if(this.cbAño.getSelectedIndex() > 0 && this.cbNivel.getSelectedIndex() > 0){  
            Anio año = new Anio();
            Nivel nivel = new Nivel();
            año.setAnio(Integer.parseInt(this.cbAño.getSelectedItem().toString()));
            nivel.setNivel(Integer.parseInt(this.cbNivel.getSelectedItem().toString()));
            LinkedList<Seccion> listaSecciones = this.contAsistencia.consultarSecciones(año, nivel);
            ((DefaultComboBoxModel)this.cbSeccion.getModel()).addElement("");
            Iterator<Seccion> iterador = listaSecciones.iterator();
            while(iterador.hasNext()){
                Seccion sec = iterador.next();
                String elemento = Integer.toString(sec.getSeccion());
                ((DefaultComboBoxModel)this.cbSeccion.getModel()).addElement(elemento);
            }
        }
    }

   private void cargarMaterias(){
        ((DefaultComboBoxModel)cbMaterias.getModel()).removeAllElements();
        this.materiasMatriculadas.clear();
        if(this.cbAño.getSelectedIndex() > 0 && this.cbNivel.getSelectedIndex() > 0 && this.cbSeccion.getSelectedIndex() > 0){
            Seccion seccion = new Seccion();
            seccion.setAnio(Integer.parseInt(this.cbAño.getSelectedItem().toString()));
            seccion.setNivel(Integer.parseInt(this.cbNivel.getSelectedItem().toString()));
            seccion.setSeccion(Integer.parseInt(this.cbSeccion.getSelectedItem().toString()));
            materiasMatriculadas = this.contAsistencia.consultarMateriasMatriculadas(seccion);
            ((DefaultComboBoxModel)this.cbMaterias.getModel()).addElement("");
            Iterator<MateriaCursada> iterador = materiasMatriculadas.iterator();
            while(iterador.hasNext()){
                MateriaCursada materia = iterador.next();
                ((DefaultComboBoxModel)this.cbMaterias.getModel()).addElement(materia.getNombre());
            }
        }
    }

    private void cargarComboBoxDatosEstudiante(){
        ((DefaultComboBoxModel)cbCedula.getModel()).removeAllElements();
        ((DefaultComboBoxModel)cbNombreApellidos.getModel()).removeAllElements();
        if(cbAño.getSelectedIndex() > 0 && cbNivel.getSelectedIndex() > 0 && cbSeccion.getSelectedIndex() > 0
                && cbMaterias.getSelectedIndex() > 0 ){
            Seccion seccion = new Seccion();
            seccion.setAnio(Integer.parseInt(this.cbAño.getSelectedItem().toString()));
            seccion.setNivel(Integer.parseInt(this.cbNivel.getSelectedItem().toString()));
            seccion.setSeccion(Integer.parseInt(this.cbSeccion.getSelectedItem().toString()));
            MateriaCursada materia = materiasMatriculadas.get(cbMaterias.getSelectedIndex()-1);
            LinkedList<Estudiante> listaEstudiantes = this.contAsistencia.consultarEstudiantesMatriculadosMateria(seccion, materia);
            DefaultComboBoxModel modeloCedula = new DefaultComboBoxModel();
            DefaultComboBoxModel modeloNombreApellidos = new DefaultComboBoxModel();
            modeloCedula.addElement("");
            modeloNombreApellidos.addElement("");
            Iterator<Estudiante> iterador = listaEstudiantes.iterator();
            while(iterador.hasNext()){
                Estudiante estudiante = iterador.next();
                modeloCedula.addElement(estudiante.getCedula());
                modeloNombreApellidos.addElement(estudiante.getNombre() + " " + estudiante.getApellidos());
            }//fin de while
            this.cbCedula.setModel(modeloCedula);
            this.cbNombreApellidos.setModel(modeloNombreApellidos);
        }
    }//fin de cargarComboBoxDatosEstudiante

    private void insertarAsistencia(){
        //TODO: Revisar este método debido a que no me deja insertar asistencia de otros periodos solo de uno
        //Error: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1-1420-0455-19-2-2008-7-1' for key 'PRIMARY'
        if(verificarCamposObligatorios()){
            AsistenciaEstudiante asistencia = this.obtenerDatosAsistencia();
            if(!this.existeAsistencia(asistencia)){
                int resultado = this.contAsistencia.insertarAsistencia(asistencia);
                if(resultado == UtilidadesCapaNegocios.QUERY_OK){
                    this.gridAsistencia.getSelectionModel().clearSelection();
                    JOptionPane.showMessageDialog(null, "El registro de asistencia fue insertado exitosamente");
                    this.volverConsultar();
                }else{
                    String mensaje = UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloAsistencia, UtilidadesCapaNegocios.opInsertar);
                    JOptionPane.showMessageDialog(null, mensaje, "ERROR",JOptionPane.ERROR_MESSAGE);
                }
            }else{
                JOptionPane.showMessageDialog(null, "El registro de asistencia ya existe", "ERROR", JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    private void modificarAsistencia(){
        if(verificarCamposObligatorios()){
            AsistenciaEstudiante asistencia = this.obtenerDatosAsistencia();
            int resultado = this.contAsistencia.modificarAsistencia(asistencia);
            if(resultado == UtilidadesCapaNegocios.QUERY_OK){
                this.gridAsistencia.getSelectionModel().clearSelection();
                JOptionPane.showMessageDialog(null, "El registro de asistencia fue modificado exitosamente");
                this.volverConsultar();
            }else{
                String mensaje = UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloAsistencia, UtilidadesCapaNegocios.opModificar);
                JOptionPane.showMessageDialog(null, mensaje, "ERROR",JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    private AsistenciaEstudiante obtenerDatosAsistencia(){
        AsistenciaEstudiante asistencia = new AsistenciaEstudiante();
        asistencia.setAnio(Integer.parseInt(this.cbAño.getSelectedItem().toString()));
        asistencia.setNivel(Integer.parseInt(this.cbNivel.getSelectedItem().toString()));
        asistencia.setSeccion(Integer.parseInt(this.cbSeccion.getSelectedItem().toString()));
        int indice = this.cbMaterias.getSelectedIndex() - 1;
        asistencia.setIdMateria(materiasMatriculadas.get(indice).getIdMateria());
        asistencia.setIdMateriaCursada(materiasMatriculadas.get(indice).getIdMateriaCursada());
        asistencia.setPeriodo(Integer.parseInt(this.cbPeriodo.getSelectedItem().toString()));
        asistencia.setCedula(this.cbCedula.getSelectedItem().toString());
        asistencia.setEscapadas(Integer.parseInt(this.spinEscapadas.getValue().toString()));
        asistencia.setTardias(Integer.parseInt(this.spinTardias.getValue().toString()));
        asistencia.setAusenciasJustificadas(Integer.parseInt(this.spinAusenciasJustificadas.getValue().toString()));
        asistencia.setAusenciasInjustificadas(Integer.parseInt(this.spinAusenciasInjustificadas.getValue().toString()));
        return asistencia;
    }

    private boolean verificarCamposObligatorios(){
        boolean resultado = this.cbAño.getSelectedIndex() > 0 && this.cbNivel.getSelectedIndex() > 0;
        resultado &= this.cbSeccion.getSelectedIndex() > 0;
        resultado &= this.cbMaterias.getSelectedIndex() > 0 && this.cbPeriodo.getSelectedIndex() >= 0;
        resultado &= this.cbCedula.getSelectedIndex() > 0 && this.cbNombreApellidos.getSelectedIndex() > 0;
        if(!resultado){
            String mensaje = "Los campos: año, nivel, sección, materia, periodo, estudiante deben ser eligidos";
            JOptionPane.showMessageDialog(null, mensaje, "ERROR",JOptionPane.WARNING_MESSAGE);
        }
        return resultado;
    }

    private boolean existeAsistencia(AsistenciaEstudiante asistencia){
        LinkedList<LlaveValor> listaLlaveValor = new LinkedList<LlaveValor>();
        listaLlaveValor.add(new LlaveValor(AsistenciaEstudiante.anioNC, asistencia.getAnio()));
        listaLlaveValor.add(new LlaveValor(AsistenciaEstudiante.nivelNC, asistencia.getNivel()));
        listaLlaveValor.add(new LlaveValor(AsistenciaEstudiante.seccionNC, asistencia.getSeccion()));
        listaLlaveValor.add(new LlaveValor(AsistenciaEstudiante.idMateriaNC, asistencia.getIdMateria()));
        listaLlaveValor.add(new LlaveValor(AsistenciaEstudiante.idMateriaCursadaNC, asistencia.getIdMateriaCursada()));
        listaLlaveValor.add(new LlaveValor(AsistenciaEstudiante.cedulaNC, asistencia.getCedula()));
        listaLlaveValor.add(new LlaveValor(AsistenciaEstudiante.cedulaNC, asistencia.getPeriodo()));
        boolean resultado = UtilidadesCapaNegocios.existenLlaves(AsistenciaEstudiante.nombreTabla, listaLlaveValor);
        return resultado;

    }
    
    @Action
    public void insertandoAsistencia() {
        this.estado.setEstadoActual(Estado.INSERTAR);
        this.habilitarAceptarCancelar(true);
        this.habilitarBotonesIME(false, false, false);
        this.cargarAños();
        this.cargarNiveles();
        this.limpiarCampos();
        this.habilitarCampos(true);
        this.cbCedula.setEnabled(true);
        this.cbNombreApellidos.setEnabled(true);
    }

    private void habilitarComboBox(boolean habilitar){
        this.cbCedula.setEnabled(habilitar);
        this.cbNombreApellidos.setEnabled(habilitar);
        this.cbAño.setEnabled(habilitar);
        this.cbNivel.setEnabled(habilitar);
        this.cbSeccion.setEnabled(habilitar);
        this.cbMaterias.setEnabled(habilitar);
        this.cbPeriodo.setEnabled(habilitar);
        this.cbCedula.setEnabled(habilitar);
        this.cbNombreApellidos.setEnabled(habilitar);
    }

    @Action
    public void modificandoAsistencia() {
        this.estado.setEstadoActual(Estado.MODIFICAR);
        this.habilitarAceptarCancelar(true);
        this.habilitarBotonesIME(false, false, false);
        this.habilitarCampos(true);
        this.habilitarComboBox(false);
    }

    @Action
    public void eliminandoAsistencia() {
        Animador.animar();
        if(this.mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opEliminar, "ELIMINAR")){
            this.eliminarAsistencia();
        }
        Animador.detenerAnimacion();
    }

    private void eliminarAsistencia(){
        AsistenciaEstudiante asistencia = this.obtenerDatosAsistencia();
        int resultado = this.contAsistencia.eliminarAsistencia(asistencia);
        if(resultado == UtilidadesCapaNegocios.QUERY_OK){
            this.gridAsistencia.getSelectionModel().clearSelection();
            JOptionPane.showMessageDialog(null, "El registro de asistencia fue eliminado exitosamente");
            this.volverConsultar();
            this.limpiarCampos();
        }else{
            String mensaje = UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloEstudiantes, UtilidadesCapaNegocios.opEliminar);
            JOptionPane.showMessageDialog(null, mensaje, "ERROR",JOptionPane.ERROR_MESSAGE);
        }
    }

    @Action
    public void accionAceptar() {
        Animador.animar();
        switch(estado.getEstadoActual()){
            case Estado.INSERTAR:
                if(this.mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opInsertar, "INSERTAR")){
                   this.insertarAsistencia();
                }
            break;
            case Estado.MODIFICAR:
                if(this.mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opModificar, "MODIFICAR")){
                    this.modificarAsistencia();
                }
            break;
        }
        Animador.detenerAnimacion();
    }

    @Action
    public void accionCancelar() {
        this.limpiarCampos();
        this.volverConsultar();
    }

    private void volverConsultar(){
        this.estado.setEstadoActual(Estado.CONSULTAR);
        this.habilitarCampos(false);
        this.habilitarComboBox(true);
        this.cbCedula.setEnabled(false);
        this.cbNombreApellidos.setEnabled(false);
        this.cargarGridAsistencia();
        this.habilitarBotonesIME(this.permisoAsistencia.isInsertar(), false, false);
        this.habilitarAceptarCancelar(false);
    }

    private void cargarGridAsistencia(){
        this.limpiarGridAsistencia();
        this.listaAsistencias.clear();
        if(permisoAsistencia.isConsultar() && this.cbAño.getSelectedIndex() > 0 && this.cbNivel.getSelectedIndex() > 0
          && this.cbSeccion.getSelectedIndex() > 0 && this.cbMaterias.getSelectedIndex() > 0 && this.cbPeriodo.getSelectedIndex() >= 0){
            Seccion seccion = new Seccion();
            seccion.setAnio(Integer.parseInt(this.cbAño.getSelectedItem().toString()));
            seccion.setNivel(Integer.parseInt(this.cbNivel.getSelectedItem().toString()));
            seccion.setSeccion(Integer.parseInt(this.cbSeccion.getSelectedItem().toString()));
            MateriaCursada materia = materiasMatriculadas.get(cbMaterias.getSelectedIndex()-1);
            int periodo = Integer.parseInt(this.cbPeriodo.getSelectedItem().toString());
            this.listaAsistencias = this.contAsistencia.consultarAsistencias(seccion, materia, periodo);
            Iterator<AsistenciaEstudiante> iterador = this.listaAsistencias.iterator();
            while(iterador.hasNext()){
                AsistenciaEstudiante asistencia = iterador.next();
                Object arregloDatos[] = new Object[7];
                arregloDatos[0] = asistencia.getCedula();
                arregloDatos[1] = asistencia.getNombreEstudiante();
                arregloDatos[2] = asistencia.getApellidosEstudiante();
                arregloDatos[3] = asistencia.getEscapadas();
                arregloDatos[4] = asistencia.getTardias();
                arregloDatos[5] = asistencia.getAusenciasInjustificadas();
                arregloDatos[6] = asistencia.getAusenciasJustificadas();
                ((DefaultTableModel)this.gridAsistencia.getModel()).addRow(arregloDatos);
            }
        }
    }

    private void limpiarGridAsistencia(){
        ((DefaultTableModel)this.gridAsistencia.getModel()).setRowCount(0);
    }

    /**
     ** Muestra un mensaje de confirmación para que el usuario decida si realmente
     ** quiere llevar a cabo una operación
     ** @param operacion Código de operación realizada, tomada de UtilidadesCapaNegocios
     ** @param titulo Título a mostrar en el cuadro de confirmación
     ** @return Confirmación: true si el usuario acepta, false en otro caso.
     **/
    private boolean mostrarMensajeConfirmacion(int operacion,String titulo){
        boolean resultado = true;
        String mensaje = UtilidadesCapaNegocios.getMensajeConfirmacion(UtilidadesCapaNegocios.moduloAsistencia, operacion);
        int respuesta = JOptionPane.showConfirmDialog(null, mensaje,titulo ,JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE);
        resultado = respuesta == JOptionPane.OK_OPTION;
        return resultado;
    }//fin de mostrarMensajeConfirmacion

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btnCancelar = new javax.swing.JButton();
        btnAceptar = new javax.swing.JButton();
        lbEscapadas = new javax.swing.JLabel();
        cbCedula = new javax.swing.JComboBox();
        cbNombreApellidos = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        btnModificar = new javax.swing.JButton();
        btnInsertar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        cbAño = new javax.swing.JComboBox();
        lbAño = new javax.swing.JLabel();
        spinEscapadas = new javax.swing.JSpinner(new SpinnerNumberModel(0,0,999,1));
        lbTardias = new javax.swing.JLabel();
        spinTardias = new javax.swing.JSpinner(new SpinnerNumberModel(0,0,999,1));
        lbAusenciasInjustificadas = new javax.swing.JLabel();
        lbAusenciasJustificadas = new javax.swing.JLabel();
        spinAusenciasInjustificadas = new javax.swing.JSpinner(new SpinnerNumberModel(0,0,999,1));
        spinAusenciasJustificadas = new javax.swing.JSpinner(new SpinnerNumberModel(0,0,999,1));
        jScrollPane1 = new javax.swing.JScrollPane();
        gridAsistencia = new javax.swing.JTable();
        lbMateria = new javax.swing.JLabel();
        cbMaterias = new javax.swing.JComboBox();
        lbPeriodo = new javax.swing.JLabel();
        cbPeriodo = new javax.swing.JComboBox();
        lbNivel = new javax.swing.JLabel();
        cbNivel = new javax.swing.JComboBox();
        lbSeccion = new javax.swing.JLabel();
        cbSeccion = new javax.swing.JComboBox();

        setMinimumSize(new java.awt.Dimension(660, 565));
        setName("Form"); // NOI18N
        setPreferredSize(new java.awt.Dimension(660, 565));

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(adsec.presentacion.LiceoEscazuApp.class).getContext().getActionMap(PanelAsistencia.class, this);
        btnCancelar.setAction(actionMap.get("accionCancelar")); // NOI18N
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(adsec.presentacion.LiceoEscazuApp.class).getContext().getResourceMap(PanelAsistencia.class);
        btnCancelar.setText(resourceMap.getString("btnCancelar.text")); // NOI18N
        btnCancelar.setName("btnCancelar"); // NOI18N

        btnAceptar.setAction(actionMap.get("accionAceptar")); // NOI18N
        btnAceptar.setText(resourceMap.getString("btnAceptar.text")); // NOI18N
        btnAceptar.setName("btnAceptar"); // NOI18N

        lbEscapadas.setText(resourceMap.getString("lbEscapadas.text")); // NOI18N
        lbEscapadas.setName("lbEscapadas"); // NOI18N

        cbCedula.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Cédula", "113150105", "116213456", "123200444" }));
        cbCedula.setName("cbCedula"); // NOI18N

        cbNombreApellidos.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Nombre y Apellidos", "Adriana Alpízar Bolaños", "Pedro Murillo Miranda", "Carlos Umaña Alvarado" }));
        cbNombreApellidos.setName("cbNombreApellidos"); // NOI18N

        jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N
        jLabel2.setName("jLabel2"); // NOI18N

        btnModificar.setAction(actionMap.get("modificandoAsistencia")); // NOI18N
        btnModificar.setText(resourceMap.getString("btnModificar.text")); // NOI18N
        btnModificar.setName("btnModificar"); // NOI18N

        btnInsertar.setAction(actionMap.get("insertandoAsistencia")); // NOI18N
        btnInsertar.setText(resourceMap.getString("btnInsertar.text")); // NOI18N
        btnInsertar.setName("btnInsertar"); // NOI18N

        btnEliminar.setAction(actionMap.get("eliminandoAsistencia")); // NOI18N
        btnEliminar.setText(resourceMap.getString("btnEliminar.text")); // NOI18N
        btnEliminar.setName("btnEliminar"); // NOI18N

        cbAño.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "2009", "2008", "2007" }));
        cbAño.setName("cbAño"); // NOI18N

        lbAño.setText(resourceMap.getString("lbAño.text")); // NOI18N
        lbAño.setName("lbAño"); // NOI18N

        spinEscapadas.setName("spinEscapadas"); // NOI18N

        lbTardias.setText(resourceMap.getString("lbTardias.text")); // NOI18N
        lbTardias.setName("lbTardias"); // NOI18N

        spinTardias.setName("spinTardias"); // NOI18N

        lbAusenciasInjustificadas.setText(resourceMap.getString("lbAusenciasInjustificadas.text")); // NOI18N
        lbAusenciasInjustificadas.setName("lbAusenciasInjustificadas"); // NOI18N

        lbAusenciasJustificadas.setText(resourceMap.getString("lbAusenciasJustificadas.text")); // NOI18N
        lbAusenciasJustificadas.setName("lbAusenciasJustificadas"); // NOI18N

        spinAusenciasInjustificadas.setName("spinAusenciasInjustificadas"); // NOI18N

        spinAusenciasJustificadas.setName("spinAusenciasJustificadas"); // NOI18N

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        gridAsistencia.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Cédula", "Nombre", "Apellidos", "Escapadas", "Tardías", "A. Injustificadas", "A. Justificadas"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        gridAsistencia.setName("gridAsistencia"); // NOI18N
        jScrollPane1.setViewportView(gridAsistencia);
        gridAsistencia.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        gridAsistencia.getSelectionModel().addListSelectionListener(this);

        lbMateria.setText(resourceMap.getString("lbMateria.text")); // NOI18N
        lbMateria.setName("lbMateria"); // NOI18N

        cbMaterias.setName("cbMaterias"); // NOI18N

        lbPeriodo.setText(resourceMap.getString("lbPeriodo.text")); // NOI18N
        lbPeriodo.setName("lbPeriodo"); // NOI18N

        cbPeriodo.setName("cbPeriodo"); // NOI18N

        lbNivel.setText(resourceMap.getString("lbNivel.text")); // NOI18N
        lbNivel.setName("lbNivel"); // NOI18N

        cbNivel.setName("cbNivel"); // NOI18N

        lbSeccion.setText(resourceMap.getString("lbSeccion.text")); // NOI18N
        lbSeccion.setName("lbSeccion"); // NOI18N

        cbSeccion.setName("cbSeccion"); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(33, 33, 33)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(lbEscapadas, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(lbMateria, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(lbNivel, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(lbAño, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(lbTardias, javax.swing.GroupLayout.Alignment.TRAILING))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(cbAño, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(cbNivel, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(lbSeccion)
                                .addGap(3, 3, 3)
                                .addComponent(cbSeccion, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(cbMaterias, javax.swing.GroupLayout.PREFERRED_SIZE, 239, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(lbPeriodo)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(cbPeriodo, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(cbCedula, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(cbNombreApellidos, javax.swing.GroupLayout.PREFERRED_SIZE, 297, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(spinTardias)
                                    .addComponent(spinEscapadas, javax.swing.GroupLayout.DEFAULT_SIZE, 51, Short.MAX_VALUE))
                                .addGap(27, 27, 27)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addComponent(lbAusenciasInjustificadas)
                                    .addComponent(lbAusenciasJustificadas))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(spinAusenciasJustificadas)
                                    .addComponent(spinAusenciasInjustificadas, javax.swing.GroupLayout.DEFAULT_SIZE, 51, Short.MAX_VALUE)))))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 636, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addContainerGap(390, Short.MAX_VALUE)
                        .addComponent(btnInsertar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnModificar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnEliminar))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addContainerGap(478, Short.MAX_VALUE)
                        .addComponent(btnAceptar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnCancelar)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(13, 13, 13)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnEliminar)
                    .addComponent(btnModificar)
                    .addComponent(btnInsertar))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(lbAño)
                    .addComponent(cbAño, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(lbNivel)
                    .addComponent(cbNivel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbSeccion)
                    .addComponent(cbSeccion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(lbMateria)
                    .addComponent(cbMaterias, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbPeriodo)
                    .addComponent(cbPeriodo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(jLabel2)
                    .addComponent(cbCedula, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cbNombreApellidos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(19, 19, 19)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(lbEscapadas)
                    .addComponent(spinEscapadas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbAusenciasInjustificadas)
                    .addComponent(spinAusenciasInjustificadas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(lbTardias)
                    .addComponent(spinTardias, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbAusenciasJustificadas)
                    .addComponent(spinAusenciasJustificadas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 239, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(btnAceptar)
                    .addComponent(btnCancelar))
                .addGap(18, 18, 18))
        );

        this.cbCedula.addActionListener(this);
        this.cbNombreApellidos.addActionListener(this);
        this.cbAño.addActionListener(this);
        this.cbMaterias.addActionListener(this);
        this.cbPeriodo.addActionListener(this);
        this.cbNivel.addActionListener(this);
        this.cbSeccion.addActionListener(this);
    }// </editor-fold>//GEN-END:initComponents



    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAceptar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnInsertar;
    private javax.swing.JButton btnModificar;
    private javax.swing.JComboBox cbAño;
    private javax.swing.JComboBox cbCedula;
    private javax.swing.JComboBox cbMaterias;
    private javax.swing.JComboBox cbNivel;
    private javax.swing.JComboBox cbNombreApellidos;
    private javax.swing.JComboBox cbPeriodo;
    private javax.swing.JComboBox cbSeccion;
    private javax.swing.JTable gridAsistencia;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lbAusenciasInjustificadas;
    private javax.swing.JLabel lbAusenciasJustificadas;
    private javax.swing.JLabel lbAño;
    private javax.swing.JLabel lbEscapadas;
    private javax.swing.JLabel lbMateria;
    private javax.swing.JLabel lbNivel;
    private javax.swing.JLabel lbPeriodo;
    private javax.swing.JLabel lbSeccion;
    private javax.swing.JLabel lbTardias;
    private javax.swing.JSpinner spinAusenciasInjustificadas;
    private javax.swing.JSpinner spinAusenciasJustificadas;
    private javax.swing.JSpinner spinEscapadas;
    private javax.swing.JSpinner spinTardias;
    // End of variables declaration//GEN-END:variables

}
